意法半导体 STM32F103C8T6 标准外设库典型实例

您所在的位置:网站首页 stm32f103c8t6 spi 意法半导体 STM32F103C8T6 标准外设库典型实例

意法半导体 STM32F103C8T6 标准外设库典型实例

2023-04-15 10:33| 来源: 网络整理| 查看: 265

笔者半年之前的一篇长文,所介绍的STC51系列单片机是一款结构简单、易于学习的嵌入式微控制器,但是由于标准 8051 架构诞生于 70 年代,其硬件架构、资源数量以及编程方式都已显老旧,成本和性能方面也皆落后于其它架构产品,市场占有率逐步遭到侵蚀,目前仅常见于一些教学与发烧友使用的范畴。伴随近几年物联网行业的快速兴起,STM32等基于 ARM Cortex 内核的微控制器,凭借丰富的片上资源与简单易用的标准外设库,逐步成为消费与工业领域中的主流产品。

意法半导体成立于 1987 年,由意大利 SGS 和法国 Thomson 两家半导体企业合并而成,本文所介绍的STM32F103C8T6属于该公司应用极为广泛的型号,其提供的STM32F10x Standard Peripheral Library标准外设库对 STM32 片上资源进行了完善的封装,相对于 ST 公司目前力推的HAL/LL库,标准外设库更加接近于传统的寄存器操作,因而也较为容易向兆易创新的GD32等国产微控制器移植。

由于知乎的markdown写作工具不支持完整的表格以及书签语法,加上篇幅字数限制,因此在这里只发布了第1、2章节的部分内容,需要查阅带有书签的完整文章请前往笔者的博客Github Pages

欢迎优秀原创技术类、IT产业经济类文章向知乎【成都IT圈】专栏进行投稿。

欢迎大家关注公众号【IT圈】:Electronics, Embedded & Web

获取更多电子技术、嵌入式系统、Web开发相关的原创性文章:

片上资源概览

STM32F103C8T6基于 ARM 32 位 Cortex™-M3 内核,使用2.0V ~ 3.6V电压供电,工作频率最高可以达到72MHz,内部采用64K或128K字节 Flash 程序存储器,以及高达20K字节的 SRAM 数据存储器;内置 CRC 循环冗余校验以及 96 位编码(即 24 位的十六进制数)的芯片唯一序列号(例如:52FF69067871515237582567)。

其主系统主要由 4 个控制单元(DCode 总线D-bus、系统总线S-bus、通用DMA1、通用DMA2)以及 4 个受控单元(内部SRAM、内部FlashFSMC、AHB 到 APB 的桥AHB2APBx)组成,它们通过一个多级的 AHB 总线相互进行连接,如下图所示:

ICode 总线:连接 M3 内核指令总线与 Flash 的指令接口,用于进行指令预取。DCode 总线:连接 M3 内核 DCode 总线与 Flash 的数据接口,用于完成常量加载和调试访问。System 总线:连接 M3 内核系统总线与总线矩阵 Bus Matrix,用于协调内核与 DMA 之间的通信。DMA 总线:连接 DMA 的 AHB 主接口与总线矩阵 Bus Matrix,用于协调 DCode 和 DMA 对 SRAM、Flash 以及其它外设的访问。Bus Matrix 总线矩阵:利用轮换算法管理内核系统总线与 DMA 主总线之间访问的仲裁,由 4 个控制单元(DCode、系统总线、DMA1 和 DMA2 总线)以及 4 个受控单元(FLITF、SRAM、FSMC、AHB2APB 桥)组成。AHB/APB bridges:两个 AHB/APB 桥提供了 AHB 与 2 条 APB 总线之间的同步连接,APB1操作速度低于36MHz,APB2操作速度最高可达72MHz。每次复位以后,除 SRAM 和 FLITF 以外的外设都会被关闭。使用外设之前,必须通过设置寄存器RCC_AHBENR打开该外设的时钟。AHB(高级高性能总线,Advanced High performance Bus)是一种系统总线,主要用于连接 CPU、DMA、DSP 等高性能模块,由主模块、从模块、基础结构三部分组成,数据传输总是由主模块发起从模块回应。APB(高级外围总线,Advanced Peripheral Bus)是一种外围总线,主要用于 UART 等低带宽外设之间的连接,其唯一的主模块是 APB 桥;两者都遵循 ARM 公司推出的AMBA芯片总线规范。时钟系统

由于 STM32 外设资源众多,工作的时钟频率各不相同,所以采用了多达 5 个时钟源:片上经过出厂调校的8MHz RC 振荡器系统时钟HSI,以及带校准的40kHz RC 振荡器作为实时时钟LSI,也可以采用外置4 ~ 16MHz晶体振荡器作为系统时钟HSE,以及带校准功能的32kHz RTC 振荡器作为实时时钟LSE;最后还内置了用于对 CPU 时钟进行倍频的的PLL锁相环。

注意HSIHSEPLL属于高速时钟源,LSILSE属于低速时钟源,任何时钟源都可以根据需要,独立进行启动或者关闭,从而优化芯片功耗。

下面是外部高速时钟源HSE的交流时序图,注意图中Tʜsᴇ标识的部分为一个系统时钟周期。

下图当中,当HSI作为PLL时钟的输入时,最高系统时钟频率只能达到64MHz。当使用 USB 功能时,必须同时使用HSEPLL,并且 CPU 的频率必须为48MHz或72MHz。当需要的ADC采样时间为1μs的时候,**APB2**必须设置为14MHz、28MHz或56MHz。

GPIO

STM32F103C8T6采用 LQFP48 方式封装,一共拥有 37 个 I/O 引脚,被分为PA(15 个)、PB(15 个)、PC(3 个)、PD(2 个)、PE(0 个)五个组,所有 I/O 接口可以映像到 16 个外部中断,并且大部份端口都可以可以兼容5V信号。每个 I/O 端口可以接受或输出8mA电流,灌电流则可达到20mA,下面是详细的引脚定义图:

每个 GPIO 端口都拥有两个 32 位配置寄存器GPIOx_CRL和GPIOx_CRH,两个 32 位数据寄存器GPIOx_IDR和GPIOx_ODR,一个 32 位置位/复位寄存器GPIOx_BSRR和一个 16 位复位寄存器GPIOx_BRR和一个 32 位锁定寄存器GPIOx_LCKR。

GPIO 端口的每个位都可以通过软件将其配置为输出(推挽输出GPIO_Mode_Out_PP、开漏输出GPIO_Mode_Out_OD)、输入(浮空输入GPIO_Mode_IN_FLOATING、上拉输入GPIO_Mode_IPU、下拉输入GPIO_Mode_IPD、模拟输入GPIO_Mode_AIN)、复用(复用推挽输出GPIO_Mode_AF_PP、复用开漏输出GPIO_Mode_AF_OD)功能。

除具有模拟输入功能的引脚之外,所有 GPIO 都拥有大电流通过能力。必要时可以对 GPIO 进行锁定,以避免意外擦写 GPIO 相关的寄存器。位于APB2上的 GPIO 引脚,其脉冲转换速度可达18MHz。

定时器

STM32F103C8T6拥有 7 个定时器,其中 1 个用于电机控制的 16 位 PWM 高级控制定时器、3 个 16 位通用定时器、2 个看门狗定时器(包含独立型的和窗口型)、1 个 24 位自减型系统嘀嗒定时器。

高级控制定时器 TIM1TIM1可以被视为分配到 6 个通道的三相 PWM 发生器,具有带死区插入的互补 PWM 输出,还可以用作完整的通用定时器;其四个独立通道可分别用于:输入捕获输出比较、产生边缘或中心对齐模式的PWM单脉冲输出。当配置为 16 位普通定时器时,与TIM2TIM3TIM4具有相同功能;配置为 16 位 PWM 发生器时,具有0 ~ 100%的全调制能力。通用定时器 TIM2、TIM3、TIM4:STM32F103C8T6 内置有 3 个可同步运行的标准定时器,每个定时器都拥有一个 16 位自动加载递加/递减计数器、一个 16 位预分频器、4 个独立通道,每个通道都可用于输入捕获输出比较PWM单脉冲输出,它们还可以通过定时器链接功能与高级控制定时器 TIM1 协同工作,从而提供同步或事件链接功能。独立看门狗定时器 IWDG:用于发生问题时复位整个系统,或作为一个自由定时器为应用程序提供超时管理;内部基于 12 位递减计数器和 8 位预分频器,并由内置40kHz的 RC 振荡器提供时钟,由于该 RC 振荡器独立于主时钟,因此可以运行在停机和待机模式。可通过程序配置为软件或者硬件启动的看门狗。窗口看门狗定时器 WWDG:用于在发生问题时复位整个系统,它由主时钟驱动,具有早期预警中断功能;其内置有 7 位的递减计数器,并且可以设置为自由运行。系统嘀嗒定时器 SysTick:仅用于实时操作系统,也可作为一个标准的递减计数器,具有 24 位的递减计数器、自动重加载功能、当计数器为 0 时能产生一个可屏蔽系统中断、可编程时钟源等特性。通信接口

STM32F103C8T6拥有 2 个 I²C 接口、3 个 USART 接口、2 个 SPI 接口、1 个 CAN 接口、1 个 USB 2.0 全速接口。

I²C:内置 I²C 总线接口能够工作于多主模式或从模式,支持标准和快速模式;I²C 接口支持 7 位或 10 位寻址,7 位从模式时支持双从地址寻址,并且内置了硬件 CRC 发生器/校验器,支持使用 DMA 操作并支持 SMBus 总线 2.0 版/PMBus 总线。I²C 总线的连接线一般不超过 2 米,并且理论上数据线需要增加2KΩ上拉电阻,所有与STM32F103C8T6连接的设备都需要共同接地。USART:片上的 USART 接口具有硬件 CTS 和 RTS 信号管理、支持 IrDA SIR ENDEC 传输编解码、兼容 ISO7816 的智能卡并提供 LIN 主/从功能;其中,USART1 接口通信速率可达4.5 Mbit/S,而其它 USART 接口可达 2.25 Mbit/S;所有 USART 接口都可以使用 DMA 操作。SPISTM32F103C8T6拥有 2 个 SPI 接口,主、从模式下全双工和半双工通信速率可达18 Mbit/S。3 位预分频器可以产生 8 种主模式频率,并且每帧可配置为 8 位或 16 位,所有 SPI 接口依然可以使用 DMA 操作。CAN:同时兼容 CAN 2.0A 和 2.0B 规范,位速率高达1Mbit/S,可以接收和发送 11 位标识符的标准帧,也可以收发 29 位标识符的扩展帧。USB 2.0:内嵌 1 个全速 USB 控制器(12Mbit/S),具有待机/唤醒功能,其专用48MHz时钟由内部主锁相环PLL直接产生(时钟源必须为HSE晶体振荡器)。51 架构单片机内置的 UART 是通用异步收发器,没有同步时钟线;而 STM32 中的 USART 是通用同步/异步收发器,带有同步时钟线USART_CK;由于异步模式更加常用,而同步模式使用频率较少,所以二者区别不大。DMA

DMA(直接内存存取,Direct Memory Access)用来提供在外设与存储器或者存储器与存储器之间的高速数据传输,传输过程无需经过 CPU 进行干预,数据直接通过 DMA 快速进行操作,从而节省大量 CPU 资源。

STM32F103 拥有 2 个 DMA 控制器共 12 个通道,其中DMA1拥有 7 个通道,DMA2拥有 5 个通道,每个通道都用来管理外部设备对片内存储器的访问请求,此外还有一个仲裁器来协调各个 DMA 请求的优先级。除了管理外部设备(Timer、ADC、SPI、I²C、USART)到储存器之间数据的双向传输,DMA 还能够管理存储器之间的数据传输。STM32F103 最小系统

STM32F103C8T6的最小系统电路由电源电路复位电路时钟电路程序下载电路4 部份组成,具体请参考下面的电路图:

电源电路STM32F103C8T6拥有三路逻辑电源VDD_1VDD_2VDD_3和一路模拟电源VDDA(由于当前实验电路对于模拟电压的读取精度无特殊要求,所以模拟电源与逻辑电源可以共用)。此外,VBAT引脚上还连接了一枚3V纽扣电池BT1,用于为内部的 RTC 时钟供电。而后续串接的去耦电容C1C3C3C4则主要用于稳定电源以及滤除杂波。STM32F103C8T6使用的3V电压是通过AMS1117-3V稳压芯片获得,该芯片将计算机 Micro USB 接口的5V供电电压转换为3.3V电压,然后将这个3.3V电压连接至继电器J1的开关控制位。

注意:上面电路原理图当中的VCC是指C = Circuit,表示接入电路的电压;VDD是指D = Device,表示元件内部的工作电压;VSS是指S = Series,表示公共连接,通常指公共接地端。

复位电路STM32F103C8T6内部已经拥有一个上电复位电路,但是生产环境下为了防止复位引脚悬空,通常还是会连接一组由电容C9电阻R7共同组成的 RC 外部复位电路,而手动外部复位则是通过后续连接的微动开关K1(即实验电路里的复位按键)来完成。

时钟电路:频率为8MHz的晶振TX1是外部系统时钟,由C5C6两枚电容协助起震;频率为32.768KHz的晶振TX2用于外部RTC实时时钟电路,由C7C8两枚电容协助起震。

程序下载电路:芯片STC15W201S用于切换单片机启动模式,实现 ASP 程序自动下载;STM32F103C8T6使用 USART 串口为单片机下载程序,实验电路中 USB 转 TTL 电平模块的TXDRXD引脚分别连接至单片机的PA10/USART1_RXPA9/USART1_TXGND引脚与单片机的VSS_1VSS_2VSS_3VSSA共同接地。

STM32F103C8T6通过BOOT0BOOT1两个引脚的电平状态组合,选择何时接收串口传送过来的程序以及何时运行这些程序,即设置微控制器的启动方式。当按键K1处于弹起状态时,将会拉低STC15W201SASPK引脚的电平状态,而STC15W201SASPL引脚连接了一枚 LED 状态指示灯并接入 GND,通过STC15W201S单片机控制STM32F103C8T6BOOT0BOOT1引脚电平状态,进而实现程序的自动下载。

ISP在线系统编程(In-System Programming)是一种无需将程序存储芯片从嵌入式设备上取出就能对其进行编程与程序下载的方法。

由于知乎的markdown写作工具不支持完整的表格以及书签语法,加上篇幅字数限制,因此在这里只发布了第1、2章节的部分内容,需要查阅带有书签的完整文章请前往笔者的博客Github Pages

欢迎优秀原创技术类、IT产业经济类文章向知乎【成都IT圈】专栏进行投稿。


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3